package com.tianya.action;
import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.view.JasperViewer;
//import net.sf.jasperreports.view.JasperViewer;
public class BaseReportAction  {
	@SuppressWarnings("unchecked")
	public void Initexecute()throws Exception {
		HttpServletResponse response= ServletActionContext.getResponse();
		try {
			String photo=ServletActionContext.getServletContext().getRealPath("WEB-INF/TestPhoto/test.jpg");
//			createchat(photo);
//			List<Map> listtotal=new ArrayList();
//			if(listtotal!=null){
//				for(int i=0;i<listtotal.size();i++){
//					
//					
//					
//					
//				}
//			}
//			createline(photo);
//			HashMap hm=new HashMap();
//			hm.put("photo", photo);
			String sample=ServletActionContext.getServletContext().getRealPath("WEB-INF/reportTemplate/pcorder.jrxml");
			 try {
		          File parent = new File(sample).getParentFile();
		          JasperCompileManager.compileReportToFile(sample, new File(parent, "pcorder.jasper").getAbsolutePath());
		        } catch (Exception e) {
		          e.printStackTrace();
		      }
			JasperPrint jprint=getjrt(sample,null,null);
//			response.setContentType("application/octet-stream"); 
//		    ServletOutputStream ouputStream;
//			ouputStream = response.getOutputStream();
//	        ObjectOutputStream oos = new ObjectOutputStream(ouputStream); 
//	        oos.writeObject(jprint); 
//	        oos.flush(); 
//	        oos.close(); 
//	        ouputStream.flush(); 
//	        ouputStream.close(); 
	        JasperViewer view = new JasperViewer(jprint, false);
	 		view.pack();
	 	    view.setVisible(true);
			} catch (JRException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
	
//		return "success";
	}
	/**
	 * ����һ��JasperPrint
	 * @param sample
	 * @param hm
	 * @param li
	 * @return
	 * @throws JRException
	 */
	@SuppressWarnings("unchecked")
	public JasperPrint getjrt(String sample,HashMap hm,List<Map> li) throws JRException{
		JasperDesign design=JRXmlLoader.load(sample);
		    new JasperCompileManager();
			JasperReport report=JasperCompileManager.compileReport(design);
		    JasperPrint theprint=JasperFillManager.fillReport(report,hm,new JRBeanCollectionDataSource(li));
		    return theprint;
     }
	
	/**
	 * ���ͼ�α?ͼƬ
	 * @param photo
	 */
//	public void  createchat(String photo){
//		
//		CategoryDataset dataset = getDataSet2(null);
//		
//		JFreeChart chart = ChartFactory.createBarChart3D(
//		"ˮ�����ͼ", // ͼ�����
//		"ˮ��", // Ŀ¼�����ʾ��ǩ
//		"����", // ��ֵ�����ʾ��ǩ
//		dataset, // ��ݼ�
//		PlotOrientation.VERTICAL, // ͼ�?��ˮƽ����ֱ
//		true, // �Ƿ���ʾͼ��(���ڼ򵥵���״ͼ������false)
//		true, // �Ƿ���ɹ���
//		false // �Ƿ����URL����
//		);
//		chart.setBackgroundPaint(Color.WHITE);//���ñ�����ɫΪ��ɫ  
//		CategoryPlot   plot   =   chart.getCategoryPlot();   
//
//		BarRenderer3D   renderer   =   new   BarRenderer3D();   
//		renderer.setBaseOutlinePaint(Color.BLACK);   
//		renderer.setWallPaint(Color.gray);   
//		  //����   Wall   ����ɫ   
//		 renderer.setWallPaint(Color.gray);   
//		  //����ÿ��ˮ����������ɫ   
////		 renderer.setSeriesPaint(0,   new   Color(0,0,255));  
//		 renderer.setSeriesPaint(0,Color.GREEN);  
//		//����ÿ����������ƽ�����֮�����  
//		 renderer.setItemMargin(0.1);   
//		 plot.setRenderer(renderer);   
//
//		 
//		 FileOutputStream fos_jpg = null;
//		try {
//		fos_jpg = new FileOutputStream(photo);
//		ChartUtilities.writeChartAsJPEG(fos_jpg,1,chart,400,300,null);
//		}catch(IOException e){
//		}
//		finally {
//		try {
//		fos_jpg.close();
//		} catch (Exception e) {}
//		}
//	}
//	/**
//	 * ���ͼ�α?ͼƬ
//	 * @param photo
//	 */
//	@SuppressWarnings("unchecked")
//	public void  createchat(String photo,List<Map> list,String title,String xname,String yname,int width,int height){
//		
//		CategoryDataset dataset = getDataSet2(list);
//		
//		JFreeChart chart = ChartFactory.createBarChart3D(
//		title, // ͼ�����
//		xname, // Ŀ¼�����ʾ��ǩ
//		yname, // ��ֵ�����ʾ��ǩ
//		dataset, // ��ݼ�
//		PlotOrientation.VERTICAL, // ͼ�?��ˮƽ����ֱ
//		true, // �Ƿ���ʾͼ��(���ڼ򵥵���״ͼ������false)
//		true, // �Ƿ���ɹ���
//		false // �Ƿ����URL����
//		);
//		chart.setBackgroundPaint(Color.WHITE);//���ñ�����ɫΪ��ɫ  
//		CategoryPlot   plot   =   chart.getCategoryPlot();   
//
//		BarRenderer3D   renderer   =   new   BarRenderer3D();   
//		renderer.setBaseOutlinePaint(Color.BLACK);   
//		renderer.setWallPaint(Color.gray);   
//		  //����   Wall   ����ɫ   
//		 renderer.setWallPaint(Color.gray);   
//		  //����ÿ��ˮ����������ɫ   
////		 renderer.setSeriesPaint(0,   new   Color(0,0,255));  
//		 renderer.setSeriesPaint(0,Color.GREEN);  
//		//����ÿ����������ƽ�����֮�����  
//		 renderer.setItemMargin(0.1);   
//		 plot.setRenderer(renderer);   
//
//		 FileOutputStream fos_jpg = null;
//		try {
//		fos_jpg = new FileOutputStream(photo);
//		ChartUtilities.writeChartAsJPEG(fos_jpg,1,chart,width,height,null);
//		}catch(IOException e){
//		}
//		finally {
//		try {
//		fos_jpg.close();
//		} catch (Exception e) {}
//		}
//	}
//	/**
//	 * ͼ�α?��ݼ�
//	 * @return
//	 */
//	@SuppressWarnings("unchecked")
//	private static CategoryDataset getDataSet2(List<Map> list) {
//		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
//		if(list!=null&&list.size()>0){
//			for(int i=0;i<list.size();i++){
//				dataset.addValue(Integer.parseInt(list.get(i).get("count").toString()),"",list.get(i).get("type").toString());
//			}
//			
//		}
//			dataset.addValue(100,"���", "ƻ��");
//			dataset.addValue(200, "���", "����");
//			dataset.addValue(300, "���", "����");
//			dataset.addValue(400, "���", "�㽶");
//			dataset.addValue(500, "���", "��֦");
//			return dataset;
//		}
//
//	public void createline(String photo){
//		// ����һ������ͼ
//		  XYSeries series = new XYSeries("Time����ͼ");
//		  // ������ͼ��������
////		  series.add(2000, 10);
////		  series.add(2004, 30);
////		  series.add(2002, 50);
////		  series.add(2006, 70);
////		  series.add(2008, 90);
////		  series.add(2010, 100);
//		  	
//		  series.add(1,175342430);
//		 series.add(2,174732779);
//		 series.add(3,63306524);
//		  series.add(4,4725836);
//		  series.add(5,295797);
//		 series.add(6,171686);
//		  series.add(7,171686);
//		  series.add(8,335340);
//		  series.add(9,117929);
//		  series.add(10,257548);
//		  series.add(11,334438);
//		  series.add(12,296599);
//		  series.add(13,172873);
//		  series.add(14,5068517);
//		  series.add(15,3529282);
//		  series.add(16,495914);
//		  series.add(17,407897);
//		  series.add(18,246972);
//		  series.add(19,203027);
//		  series.add(20,208984);
//		  series.add(21,1629796);
//		  series.add(22,591455);
//		  series.add(23,325143);
//		  series.add(24,213827);
//		  series.add(25,1081235);
//		  series.add(26,912498);
//		  series.add(27,554379);
//		  series.add(28,199974);
//		  series.add(29,1123735);
//		  series.add(30,952260);
//		  series.add(31,218221);
//		  series.add(32,410264);
//		  series.add(33,271311);
//		  series.add(34,323757);
//		  series.add(35,226072);
//		  series.add(36,126818);
//		  series.add(37,490522);
//		  series.add(38,213755);
//		  series.add(39,1319937);
//		  series.add(40,548357);
//		  series.add(41,6991262);
//		  series.add(42,861526);
//		  series.add(43,507054);
//		  series.add(44,206459);
//		  series.add(45,868387);
//		  series.add(46,546015);
//		  series.add(47,358745);
//		  series.add(48,236823);
//		  series.add(49,125338);
//		  series.add(50,347327);
//		  series.add(51,385184);
//		  series.add(52,334176);
//		  series.add(53,235430);
//		  series.add(54,207816);
//		  series.add(55,104211);
//				
//		  // �����������
//		  XYSeriesCollection dataset = new XYSeriesCollection();
//		  dataset.addSeries(series);
//		  
//		  // ��������ͼ 
//		  // JFreeChart chart = ChartFactory.createXYLineChart("����"��"x���־","y���־","�������","����ͼ����ʾ����",�Ƿ���ʾͼ��,�Ƿ������ʾ,�Ƿ����ñ����ŵ�ַ);
//		  // ͼ����ʾ����
//		  // (1)HORIZONTAL:������ʾͼ��
//		  // (2)VERTICAL:������ʾͼ��   
//		  JFreeChart chart = ChartFactory.createXYLineChart("������ݷ���", "����","time",dataset,PlotOrientation.VERTICAL,true,true,false);
//		  
//		  // �ı�ͼ�ε���ʾ����ʹ��������ʾ�����ӵ�(��ת������)
//		//   XYItemRenderer rend = chart.getXYPlot().getRenderer();
//		//   StandardXYItemRenderer rr = (StandardXYItemRenderer)rend;
//		//   rr.setPlotImages(true);
//		  try{
//		   // ����ͼ����ʾ���
////		   ChartFrame cf = new ChartFrame("����ͼ",chart);
////		   cf.pack();
//		   // ����ͼ�οɼ�
////		   cf.setVisible(true);
//		   
//		   // // ����ͼƬ��ָ���ļ���
//		    ChartUtilities.saveChartAsJPEG(new File(photo), chart, 500, 300);
//		  } catch (Exception e){
//		   System.err.println("Problem occurred creating chart.");
//		  }
//	
//
//		
		//����ͼ����
//		String title = "���Ʒ���";
//		//����ͼX����ʾ
//		String domain = "�·�����";
//		//����ͼY����ʾ
//		String range = "Ӧ�����";
//		//����ͼ�Ա���
//		String subtitleStr = "2003�������";
//		//����ʱ�����Դ
//		//ÿһ��TimeSeries��ͼ����һ������
//		TimeSeries ca = new TimeSeries("����");
//		for (int i = 1999; i < 2005; i++) {
//		for (int mon = 0; mon < 12; mon++) {
//			//ca.add(new Month(mon + 1, i), new Double(500 + Math.random() * 100));
//			//TimeSeriesDataPair��һ��ʱ������ֵ����
//			ca.add(new TimeSeriesDataPair(new Day(1, mon + 1, i),new Double(500 + Math.random() * 100)));
//			}
//		}
//		TimeSeries ibm = new TimeSeries("���");
//		for (int i = 1999; i < 2005; i++) {
//		for (int mon = 0; mon < 12; mon++) {
//		//ibm.add(new Month(mon+1,i),new Double(400-Math.random()*100));
//		ibm.add(new TimeSeriesDataPair(new Day(1, mon + 1, i),new Double(400 - Math.random() *
//		100)));
//		}
//		}
//		TimeSeries king = new TimeSeries("����");
//		for (int i = 1999; i < 2005; i++) {
//		for (int mon = 0; mon < 12; mon++) {
//		//ibm.add(new Month(mon+1,i),new Double(400-Math.random()*100));
//		king.add(
//		new TimeSeriesDataPair(new Day(1, mon + 1, i),new Double(300 - Math.random() * 100)));
//		}
//		}
//		//ʱ��������ݼ���
//		TimeSeriesCollection dataset = new TimeSeriesCollection();
//		dataset.addSeries(ca);
//		dataset.addSeries(ibm);
//		dataset.addSeries(king);
//		//dataset.addSeries(jpy);
//		//dataset.addSeries(mav);
//		//ʱ������Ԫ��
//		JFreeChart chart =
//		ChartFactory.createTimeSeriesChart(title,domain,range,dataset,true,true,false);
//		ChartFactory.createTimeSeriesChart(title,domain,range,dataset,true,true,false);
//		// then customise it a little...
//		TextTitle subtitle = new TextTitle(subtitleStr, new Font("����", Font.BOLD, 12));
//		chart.addSubtitle(subtitle);
//		chart.setTitle(new TextTitle(title, new Font("����", Font.ITALIC, 15)));
//		//pie.setSeriesLabelFont(new Font("����", Font.BOLD, 15));
//		chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0, 1000, Color.blue));
//		//sysout
//		//����ļ���ָ��Ŀ¼
//		String rfname = photo;
//		
//		String fileName = "d:/test/" + rfname;
//		try {
//		//for
//		//System.out.println();
//		ChartUtilities.saveChartAsJPEG(new File(fileName), 100, chart, 600, 600);
//		// log.info("....Create image File:" + fileName);
//		} catch (IOException exz) {
//		System.out.print("....Cant��t Create image File");
//		}
//	}
}
